import "@site/src/languages/highlight";

# Data

**描述：**

&emsp;&emsp;单例对象，提供了存储和访问游戏全局定义数据的统一位置。

## Data.Relation

**类型：** 枚举。

**描述：**

&emsp;&emsp;枚举类型，表示两个游戏单位组之间的可能关系。

**签名：**
```tl
enum Relation
	"Enemy"
	"Friend"
	"Neutral"
	"Unknown"
	"Any"
end
```

## groupFirstPlayer

**类型：** 只读成员变量。

**描述：**

&emsp;&emsp;第一个玩家单位组可用的编号。

**签名：**
```tl
const groupFirstPlayer: integer
```

## groupLastPlayer

**类型：** 只读成员变量。

**描述：**

&emsp;&emsp;最后一个玩家单位组可用的编号。

**签名：**
```tl
const groupLastPlayer: integer
```

## groupHide

**类型：** 只读成员变量。

**描述：**

&emsp;&emsp;隐藏的单位组的编号，默认不会与其它编号的单位组发生碰撞。

**签名：**
```tl
const groupHide: integer
```

## groupDetectPlayer

**类型：** 只读成员变量。

**描述：**

&emsp;&emsp;用于检测其它玩家单位组的单位组编号，默认会与所有玩家单位组发生碰撞。

**签名：**
```tl
const groupDetectPlayer: integer
```

## groupTerrain

**类型：** 只读成员变量。

**描述：**

&emsp;&emsp;代表场景地形的单位组的编号，默认会与其它单位组发生碰撞。

**签名：**
```tl
const groupTerrain: integer
```

## groupDetection

**类型：** 只读成员变量。

**描述：**

&emsp;&emsp;用于检测其它单位组的单位组编号，默认会与其他任何单位组发生碰撞。

**签名：**
```tl
const groupDetection: integer
```

## store

**类型：** 只读成员变量。

**描述：**

&emsp;&emsp;用于全局存储任意游戏定义数据的字典对象。

**签名：**
```tl
const store: Dictionary
```

## setShouldContact

**类型：** 函数。

**描述：**

&emsp;&emsp;设置两个单位组是否应该发生碰撞。

**签名：**
```tl
setShouldContact: function(self: Data, groupA: integer, groupB: integer, contact: boolean)
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| groupA | integer | 第一个单位组的编号。 |
| groupB | integer | 第二个单位组的编号。 |
| contact | boolean | 两个单位组是否会发生碰撞。 |

## getShouldContact

**类型：** 函数。

**描述：**

&emsp;&emsp;获取两个单位组是否应该发生碰撞。

**签名：**
```tl
getShouldContact: function(self: Data, groupA: integer, groupB: integer): boolean
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| groupA | integer | 第一个单位组的编号。 |
| groupB | integer | 第二个单位组的编号。 |

**返回值：**

| 返回类型 | 描述 |
| --- | --- |
| boolean | 两个单位组是否会发生碰撞。 |

## setRelation

**类型：** 函数。

**描述：**

&emsp;&emsp;设置两个单位组之间的关系。

**签名：**
```tl
setRelation: function(self: Data, groupA: integer, groupB: integer, relation: Relation)
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| groupA | integer | 第一个单位组的编号。 |
| groupB | integer | 第二个单位组的编号。 |
| relation | Relation | 两个单位组之间的关系。 |

## getRelation

**类型：** 函数。

**描述：**

&emsp;&emsp;获取两个单位组之间的关系。

**签名：**
```tl
getRelation: function(self: Data, groupA: integer, groupB: integer): Relation
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| groupA | integer | 第一个单位组的编号。 |
| groupB | integer | 第二个单位组的编号。 |

**返回值：**

| 返回类型 | 描述 |
| --- | --- |
| Relation | 两个单位组之间的关系. |

## getRelation

**类型：** 函数。

**描述：**

&emsp;&emsp;获取两个物理体之间的关系。

**签名：**
```tl
getRelation: function(self: Data, bodyA: Body, bodyB: Body): Relation
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| bodyA | Body | 第一个物理体。 |
| bodyB | Body | 第二个物理体。 |

**返回值：**

| 返回类型 | 描述 |
| --- | --- |
| Relation | 两个物理体之间的关系。 |

## isEnemy

**类型：** 函数。

**描述：**

&emsp;&emsp;两个单位组是否为"敌人"关系。

**签名：**
```tl
isEnemy: function(self: Data, groupA: integer, groupB: integer): boolean
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| groupA | integer | 第一个单位组的编号。 |
| groupB | integer | 第二个单位组的编号。 |

**返回值：**

| 返回类型 | 描述 |
| --- | --- |
| boolean | 两个单位组是否为"敌人"关系。 |

## isEnemy

**类型：** 函数。

**描述：**

&emsp;&emsp;两个物理体是否为"敌人"关系。

**签名：**
```tl
isEnemy: function(self: Data, bodyA: Body, bodyB: Body): boolean
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| bodyA | Body | 第一个物理体。 |
| bodyB | Body | 第二个物理体。 |

**返回值：**

| 返回类型 | 描述 |
| --- | --- |
| boolean | 两个物理体是否为"敌人"关系。 |

## isFriend

**类型：** 函数。

**描述：**

&emsp;&emsp;两个单位组是否为"友方"关系。

**签名：**
```tl
isFriend: function(self: Data, groupA: integer, groupB: integer): boolean
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| groupA | integer | 第一个单位组的编号。 |
| groupB | integer | 第二个单位组的编号。 |

**返回值：**

| 返回类型 | 描述 |
| --- | --- |
| boolean | 两个单位组是否为"友方"关系。 |

## isFriend

**类型：** 函数。

**描述：**

&emsp;&emsp;两个物理体是否为"友方"关系。

**签名：**
```tl
isFriend: function(self: Data, bodyA: Body, bodyB: Body): boolean
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| bodyA | Body | 第一个物理体。 |
| bodyB | Body | 第二个物理体。 |

**返回值：**

| 返回类型 | 描述 |
| --- | --- |
| boolean | 两个物理体是否为"友方"关系。 |

## isNeutral

**类型：** 函数。

**描述：**

&emsp;&emsp;两个单位组是否为"中立"关系。

**签名：**
```tl
isNeutral: function(self: Data, groupA: integer, groupB: integer): boolean
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| groupA | integer | 第一个单位组的编号。 |
| groupB | integer | 第二个单位组的编号。 |

**返回值：**

| 返回类型 | 描述 |
| --- | --- |
| boolean | 两个单位组是否为"中立"关系。 |

## isNeutral

**类型：** 函数。

**描述：**

&emsp;&emsp;两个物理体是否为"中立"关系。

**签名：**
```tl
isNeutral: function(self: Data, bodyA: Body, bodyB: Body): boolean
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| bodyA | Body | 第一个物理体。 |
| bodyB | Body | 第二个物理体。 |

**返回值：**

| 返回类型 | 描述 |
| --- | --- |
| boolean | 两个物理体是否为"中立"关系。 |

## setDamageFactor

**类型：** 函数。

**描述：**

&emsp;&emsp;设置特定伤害类型对特定防御类型的加成系数，内置的"MeleeAttack"和"RangeAttack"的单位动作使用简单的计算式`finalDamage = damage * bonus`来计算攻击产生的伤害。

**签名：**
```tl
setDamageFactor: function(self: Data, damageType: integer, defenceType: integer, bounus: number)
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| damageType | integer | 伤害类型的编号。 |
| defenceType | integer | 防御类型的编号。 |
| bonus | number | 伤害系数. |

## getDamageFactor

**类型：** 函数。

**描述：**

&emsp;&emsp;获得特定伤害类型对特定防御类型的加成系数。

**签名：**
```tl
getDamageFactor: function(self: Data, damageType: integer, defenceType: integer): number
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| damageType | integer | 伤害类型的编号。 |
| defenceType | integer | 防御类型的编号。 |

**返回值：**

| 返回类型 | 描述 |
| --- | --- |
| number | 伤害系数. |

## isPlayer

**类型：** 函数。

**描述：**

&emsp;&emsp;检查一个物理体是否为玩家单位。
等同于代码 `Data.groupFirstPlayer <= body.group and body.group <= Data.groupLastPlayer`。

**签名：**
```tl
isPlayer: function(self: Data, body: Body): boolean
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| body | Body | 要检查的物理体。 |

**返回值：**

| 返回类型 | 描述 |
| --- | --- |
| boolean | 是否为玩家单位。 |

## isTerrain

**类型：** 函数。

**描述：**

&emsp;&emsp;检查一个物理体是否为地形单位。
等同于代码 `body.group == Data.groupTerrain`.

**签名：**
```tl
isTerrain: function(self: Data, body: Body): boolean
```

**参数：**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| body | Body | 要检查的物理体。 |

**返回值：**

| 返回类型 | 描述 |
| --- | --- |
| boolean | 是否为地形单位。 |

## clear

**类型：** 函数。

**描述：**

&emsp;&emsp;清除存储在"Data"对象中的所有数据，包括Data.store字段中的用户自定义数据。
并将一些内置定义数据重置为默认值。

**签名：**
```tl
clear: function(self: Data)
```